home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 7 / BBS in a Box - Macintosh - Volume VII (BBS in a Box) (January 1993).iso / Files / Hyper / Hyperj-Hz / HyperNotes.cpt / HyperNotes next >
Text File  |  1990-12-13  |  20KB  |  539 lines

  1.  
  2.                                      WINDOID
  3.                                     Issue  #3
  4.                   The Publication for the Informed HyperCard User
  5.                               Editor:  David Leffler
  6.  
  7. Contents:
  8. INTRODUCTION
  9. EDITOR'S CHOICE
  10. HYPERCARD USER TIPS
  11. UNIVERSAL IMPORT BUTTON
  12. WHOOPS!
  13. THE FORM
  14.  
  15. In this third issue of WINDOID, we will continue to cover importing text into
  16. HyperCard™. Gary Bond, one of Apple’s outstanding HyperCard test team members,
  17. wrote a universal import button that takes into consideration nearly
  18. everything. You can now create a button that imports MacWrite™, Microsoft
  19. Word™, many database files, and even HyperCard stacks! We think you are going
  20. to enjoy this.
  21. Phil Wyman, another excellent Apple HyperCard tester, has provided us with more
  22. of his highly acclaimed power-user tips and has taken a stab at explaining some
  23. of the more interesting aspects of HyperCard properties.
  24. In the two previous issues, there were some mistakes. I would like to apologize
  25. for any inconvenience or frustration they might have caused and rectify them.
  26. The errata will appear on page seven under WHOOPS. I generally get all the text
  27. stuffed into the WINDOID newsletter moments before the Thursday meeting, and
  28. sometimes I miss something. Many of the excellent scripters that avidly read
  29. WINDOID have noticed my lapses and have provided me with needed repairs. For
  30. their kind assistance, I offer my thanks.
  31.  
  32. WINDOID provides an opportunity for its readers to contribute to the ongoing
  33. growth and excellence of HyperCard. With your assistance we can continue to
  34. bring to HyperCard added depth and functionality. In the back of every issue
  35. will be a form for you to keep by your Macintosh™. This form will allow you the
  36. unique opportunity to participate directly in the continued development of
  37. HyperCard.
  38.  
  39. We will read all the forms returned and address questions that are being asked
  40. by HyperCard users. We will ask the team and provide you with an answer and
  41. publish the answers in this newsletter.  In this way we can gather information
  42. and provide for your needs in future versions of HyperCard.
  43.  
  44. WINDOID is trying to make a difference in the way that you work with HyperCard.
  45. We need your input.  What sort of stacks are you using, what kinds of stacks
  46. are you creating, and what are some of the joys and frustrations you are
  47. experiencing.  We really want to know!
  48.  
  49. If you have a bug, suggestion, comment, or just want to know the best way to do
  50. something in HyperCard, you can fill out the form and send it to:
  51.  
  52. AHUG c/o David Leffler
  53. Apple Computer, Inc.
  54. MS/27-AQ
  55. 20525 Mariani Ave.
  56. Cupertino, CA 95014
  57.  
  58. Or copy the format and Apple-Link™ it to:  HYPERBUG$
  59.  
  60.                                   EDITOR'S CHOICE
  61.                                  by  David Leffler
  62.  
  63. At the last Apple HyperCard User Group meeting , Danny Goodman, author of The
  64. Complete HyperCard Handbook, presented to an appreciative audience his
  65. incredible business productivity stack Focal Point™. It will be released soon
  66. by Activision™. We were all amazed at the incredible graphics and awesome
  67. features he has scripted into it. Danny, as you might know, is not a programmer
  68. and has always been frustrated by his inability to turn his ideas into
  69. software. HyperCard has empowered him to not only turn his ideas into reality,
  70. but to allow him the opportunity to share his ideas with the world. Thank you
  71. Danny!
  72.  
  73. Amanda Goodenough, author of the Inigo and My Favorite Camel series of
  74. wonderful adventures, was also on hand. Her obvious love of stories and great
  75. presentation style captivated the audience.  Amanda continues to enhance and
  76. produce more of these non-textual stories and has graciously allowed us to
  77. place them in an Amanda’s Stacks folder on the AHUG StackWare™ server. My
  78. Favorite Camel is a favorite of mine, and I think everyone should see it and
  79. share it with someone they love.
  80.  
  81. There are two other stacks on the StackWare™ server that also deserve serious
  82. attention. The AIDS stack is a perfect representation of how HyperCard can be
  83. used in an incredibly invocative eye and heart grabbing style. This stack is
  84. not only visually and emotionally gripping, but is an excellent  example of how
  85. to use HyperCard as a powerful vehicle to move you through diverse information.
  86. You should get this stack.
  87.  
  88. Finally, Tree Frog Studio software presents CheapSequencer.  Tree Frog has
  89. given us a music sequencer that must be seen and heard to be believed. These
  90. innovative stackware developers are interested in entertaining us with great
  91. graphics and functional stackware tools.
  92. It’s stacks and people like these that really show the power and versatility of
  93. HyperCard.
  94.  
  95.                                  POWERUSERS TIPS
  96.                                   by Phil Wyman
  97.  
  98. 1.  If you get tired of pulling the Tools Windoid off of the menubar when you
  99. need it, try Option-Tab, which will tear it off for you!  Also, if the Tools
  100. Windoid is in a paint tool,  hitting Tab will tear off the Patterns Windoid.
  101.  
  102. 2.  If you have a line in your script that is longer than the editor window,
  103. you can place an Option-Return at a space in the line to break it into two
  104. smaller lines.  The two lines will execute in the same way as the original
  105. line.  (Do not place the Option-Return into the middle of a quoted string.
  106. Also, if you use the Option-Return in a comment,  remember that every line of a
  107. comment must start with a double hyphen!)
  108.  
  109. 3.  For those programmers out there who are used to “for next” loops, there is
  110. a “next repeat” command in HyperTalk which works in a repeat loop a lot like a
  111. “next” command in a “for next” loop.  The “next repeat” command does not
  112. execute anything that follows it in the repeat loop, but rather starts
  113. executing at the beginning of the repeat loop.
  114. Also, if you wish to exit the repeat loop altogether, without executing anymore
  115. of the lines in  the repeat loop, then use “exit repeat”.
  116.  
  117. Note:
  118. If you want to exit the entire message handler from anywhere in the handler,
  119. use “exit <handlername>” (i.e., “exit mouseup”).
  120. If you wish to leave the handler but wish the current message to be sent on up
  121. the hierarchical path from where it is now, then use “pass <handlername>”.
  122.  
  123. 4.  When concatenating two strings,  you can add a space between the two
  124. strings by using two ampersands “&&” instead of just one “&”.
  125.  
  126. 5.  A shorthand for “button” in HyperTalk is “btn”.  A shorthand for
  127. “background” is “bkgnd”.
  128.  
  129. 6.  You can copy buttons, fields, backgrounds or cards between stacks.  This is
  130. a very powerful feature of HyperCard.
  131.  
  132. 7.  For those of you with the regular size Mac Plus or Mac SE screens, try this
  133. for a thrill:
  134.       Set loc of cardWindow to 10,50
  135. You will see what people on large screens see all the time, a window title bar
  136. which states the pathname of the window you are viewing.  (To reset your
  137. cardWindow, “Set loc of cardWindow to 0,0”.)
  138.  
  139. 8.  If you are in any tool other than the Browse tool, you can return to the
  140. Browse tool by Command-Tab.
  141.  
  142. 9.  When you are in the Button tool, you can Command-Drag to create a new
  143. button.  Option-Drag on a button and you will drag a copy of the button.
  144.  
  145. 10.  A first attempt at a small treatise on the use of “the”,”of”, and “()” in
  146. HyperTalk:
  147.  
  148. In general, either “the”, “of”, or parentheses () are required to signal
  149. HyperTalk that a function or property is to be activated.
  150.  
  151.  
  152. PROPERTIES:
  153. With button, card, background, stack, and window properties, “the” is optional,
  154. but you need “of”. Also, properties never have parentheses. You can say:
  155.    put hilite of button 1
  156.    put the hilite of button 1
  157.  
  158. Since there is no “of” to activate it, you cannot say:
  159.       put the hilite button 1
  160.  
  161. If you are using a global or painting property, you need “the”, since there is
  162. no “of” to activate the property. For instance, you can say:
  163.    put the lockScreen
  164.    put the textAlign
  165.  
  166. However, you cannot put the property by saying:
  167.    put lockScreen
  168. because HyperCard will think you are using lockScreen as a variable, not a
  169. property.
  170.  
  171. FUNCTIONS:
  172.  
  173. Either “the”, “of”, or parentheses () are required with a function.
  174.  
  175. However, you cannot mix “the” with parentheses in a system function. For
  176. instance, you cannot say:
  177.    put the charToNum(“a”)
  178.  
  179.  You are allowed to say:
  180.    put the chartonum of “a
  181.    put chartonum(“a”)
  182.    put the chartonum of (“a”)
  183.    If a system function has more than one argument, it will always require
  184. parentheses.  For user-defined functions, you must always use parentheses, even
  185. if there are no arguments—i.e., userFunction().
  186. If a function does not use “of” or “()”, then “the” is required! For example,
  187. “date” doesn’t work without “the”, since there is not an “of” or “()” to
  188. activate the function. You can say:
  189.      put the date
  190.  
  191. But you cannot say:
  192.      put date
  193. because HyperTalk will assume that “date” is a variable. This concept of
  194. insisting on a “the” to activate the function allows for future expansion of
  195. more system functions, since system functions will not be able to collide with
  196. variables that users already have in their scripts.
  197.  
  198.                             The UNIVERSAL IMPORT BUTTON
  199.                                    by Gary Bond
  200.                                      Rev. 2.2
  201.  
  202. Last issue we dealt with importing text. While those approaches are reliable,
  203. they are also very slow and don’t account for a number of problems that might
  204. occur along the way. Consistent with our goal to provide you with the best,
  205. this issue contains a script for a universal import button which does both
  206. kinds of import (text and data). To use it, type it into any button script.
  207.  
  208. In addition to importing text files it also imports Macwrite and Word documents
  209. and even Hypercard stacks! This version of the import button fixes bugs both in
  210. Hypercard and in previous button versions.
  211.  
  212.  
  213.  
  214. on mouseUp
  215.   global cardcount,startcard,memory,header
  216.   get userlevel
  217.   put it into item 1 of memory
  218.   set userlevel to 5
  219.   set lockmessages to true
  220.   set lockscreen to true
  221.   put short id of this card into startcard
  222.   answer “Import text file as:” with “Data” or “Text” or “Cancel
  223.   if it is “Cancel” then Cleanexit
  224.   if it is “Text” then
  225.     answer “Include header information in fields?” with “Yes” or “No
  226.     put it into header
  227.     Importext
  228.   else
  229.     Importdata
  230.   end if
  231.   go next card
  232.   Cleanexit “Compact
  233. end mouseup
  234.  
  235. on importext
  236.   global cardcount,startcard,memory,header
  237.   put 0 into cardcount
  238.   repeat
  239.     ask “Name or pathname of text file to import:” with item 2 of memory
  240.     if short name of this stack is in it then
  241.       if “,” is not in memory then put “,” after memory
  242.       put it into item 2 of memory
  243.       answer “Can’t import current stack!” with “Ok
  244.       next repeat
  245.     end if
  246.     if it is empty then
  247.       Cleanexit
  248.     else
  249.       exit repeat
  250.     end if
  251.   end repeat
  252.   put it into filename
  253.   if “,” is not in memory then put “,” after memory
  254.   put it into item 2 of memory
  255.   set cursor to 4
  256.   open file filename
  257.   repeat
  258.     read from file filename for 16384
  259.     if it is empty and cardcount is 0 then
  260.       answer “Could not find file: “ & filename with “Ok
  261.       close file filename
  262.       Cleanexit
  263.     end if
  264.     if it is empty then exit repeat
  265.     put return after it
  266.     domenu “New card
  267.     add 1 to cardcount
  268.     domenu “New field
  269.     set name of card field (number of card fields) to “Import
  270.     set style of card field “Import” to scrolling
  271.     drag from the loc of card field “Import” to 0,62
  272.     drag from 190,100 to 512,342
  273.     if header is “Yes” then
  274.       put “Characters:” && number of chars in it & return & return before it
  275.       put “Lines:” && number of lines in it & return before it
  276.       put “File:” && filename & return before it
  277.       put “Import card:” && cardcount & return before it
  278.     end if
  279.     put it into card field “Import
  280.   end repeat
  281.   close file filename
  282.   if header is “Yes” then
  283.     repeat until the short id of this card is startcard
  284.       put “ of” && cardcount after line 1 of card field “Import
  285.       go previous card
  286.     end repeat
  287.   else
  288.     go card id startcard
  289.   end if
  290. end importext
  291.  
  292. on importdata
  293.   global filename,cardcount,startcard,memory,header
  294.   put empty into delimiters
  295.   put empty into filename
  296.   put 0 into cardcount
  297.   put 0 into limit
  298.   put 0 into fieldcount
  299.   repeat until delimiters is not empty
  300.     put 0 into nofields
  301.     answer “Use Tab and Return as delimiters?” with “Yes” or “Other” or
  302. “Cancel
  303.     if it is “Cancel” then mouseup
  304.     if it is “Yes” then put “9,13” into delimiters
  305.     if it is “Other” then
  306.       repeat until ((item 1 of it > 0 and item 1 of it < 256)¬
  307.         and (item 2 of it > 0 and item 2 of it < 256)) or it is empty
  308.         ask “Enter two comma separated Ascii delimiters:” with empty
  309.         put it into delimiters
  310.       end repeat
  311.     end if
  312.   end repeat
  313.   if item 1 of delimiters is item 2 of delimiters then put 1 into nofields
  314.   answer “Include header information in fields?” with “Yes” or “No
  315.   put it into header
  316.   repeat
  317.     ask “Name or pathname of text file to import:” with item 2 of memory
  318.     if short name of this stack is in it then
  319.       if “,” is not in memory then put “,” after memory
  320.       put it into item 2 of memory
  321.       answer “Can’t import current stack!” with “Ok
  322.       next repeat
  323.     end if
  324.     if it is empty then
  325.       if cardcount > 0 then
  326.         close file filename
  327.         CleanExit
  328.       end if
  329.       Importdata
  330.     else
  331.       exit repeat
  332.     end if
  333.   end repeat
  334.   put it into filename
  335.   if “,” is not in memory then put “,” after memory
  336.   put it into item 2 of memory
  337.   set cursor to 4
  338.   open file filename
  339.   repeat
  340.     read from file filename until (numtochar of item 2 of delimiters)
  341.     if it is empty and cardcount is 0 then
  342.       answer “Could not find file: “ & filename with “Ok
  343.       close file filename
  344.       Cleanexit
  345.     end if
  346.     if it is empty then exit repeat
  347.     if chartonum(last character of it) is not item 2 of delimiters then
  348.       put item 2 of delimiters into temp
  349.       if temp is 9 then put “Tab” into temp
  350.       if temp is 13 then put “Return” into temp
  351.       answer “Can’t find record delimiter: “ && temp with “Ok
  352.       close file filename
  353.       cleanexit
  354.     end if
  355.     put empty into last character of it
  356.     if (numtochar of item 1 of delimiters) is not in it and nofields is 0 then
  357.       put item 1 of delimiters into temp
  358.       if temp is 9 then put “Tab” into temp
  359.       if temp is 13 then put “Return” into temp
  360.       answer “Can’t find field delimiter: “ && temp with “Help” or “Ok
  361.       if it is “help” then
  362.         answer “Use double record delimiters for records...” with “Continue
  363.         answer “with no field delimiters. Example: 13,13” with “Ok
  364.       end if
  365.       close file filename
  366.       Cleanexit
  367.     end if
  368.     if (numtochar of item 1 of delimiters) is not “,” and nofields is 0 then
  369.       repeat until (numtochar of item 1 of delimiters) is not in it
  370.         put “,” into character offset((numtochar of item 1 of delimiters),it)
  371. of it
  372.       end repeat
  373.     end if
  374.     if cardcount is 0 then
  375.       domenu “New background
  376.     else
  377.       domenu “New card
  378.     end if
  379.     add 1 to cardcount
  380.     if nofields is 0 then
  381.       put the number of items in it into limit
  382.     else
  383.       put nofields into limit
  384.     end if
  385.     repeat with count = 1 to limit
  386.       if cardcount is 1 then
  387.         add 1 to fieldcount
  388.         if fieldcount < 125 then
  389.           domenu “New field
  390.         else
  391.           answer “No more fields can be created!” with “Ok
  392.           Cleanexit “Compact
  393.         end if
  394.       end if
  395.       put “Field” & count into fieldname
  396.       set name of bkgnd field (number of bkgnd fields) to fieldname
  397.       set style of bkgnd field fieldname to scrolling
  398.       If nofields is 0 and header is “Yes” then
  399.         put “Field” && count && “of” && the number of items in it & return into
  400. bkgnd field fieldname
  401.         put “Record” && cardcount && “of file:” && filename & return & return
  402. after bkgnd field fieldname
  403.       end if
  404.       if nofields is 0 then
  405.         put item count of it & return after bkgnd field fieldname
  406.       else
  407.         put it & return after bkgnd field fieldname
  408.       end if
  409.     end repeat
  410.     choose browse tool
  411.   end repeat
  412.   close file filename
  413.   go card id startcard
  414. end importdata
  415.  
  416. on Cleanexit var
  417.   global memory
  418.   if param(1) is “compact” then
  419.     domenu “Compact stack
  420.   end if
  421.   choose browse tool
  422.   set userlevel to item 1 of memory
  423.   set lockscreen to false
  424.   set lockmessages to false
  425.   exit to hypercard
  426. end Cleanexit
  427.  
  428. We hope that this script will aid in your productivity with HyperCard.  Please
  429. let us know how you like it.
  430.  
  431.  
  432.                                       WHOOPS
  433.                                  by David Leffler
  434.  
  435. An errata from the first two issues of WINDOID.
  436.  
  437. ISSUE #1:
  438.  
  439. In the first issue Gary Bond showed us how to find out which line of a
  440. scrolling field the user has clicked on. Apple employee Brian McGhie found a
  441. small flaw and wrote me the following letter:
  442.  
  443. The question was asked, “How can I find out which line of a field a user has
  444. clicked in?” The response was a method that would work in static fields, and
  445. then further developed into a method for scrolling fields. The function
  446. Clickline as given for scrolling windows only works if the scrolling field is
  447. (in pixels) an integer multiple of the textheight. A corrected version of
  448. Clickline appears below.
  449.  
  450. Function Clickline
  451.      return (trunc(((scroll of the target) ¬
  452.      + (item two of the clickloc) ¬
  453.      - (item two of the rect of the target)) ¬
  454.      div the textheight of the target) + one)
  455. End Clickline
  456.  
  457. The idea is to calculate the number of pixels from the top of the field to the
  458. position that you clicked on. So you take the number of pixels that have
  459. scrolled offscreen, and add in the vertical position of the mouseclick minus
  460. the vertical position of the top of the field. This sum is the total number of
  461. pixels from the logical top of the window —not the visual top. Divide by the
  462. height of the font to get the number of lines. Since this number is not always
  463. an integer, truncate it. The result is a zero based count of lines. Add one and
  464. return the correct line number that was clicked in.
  465.  
  466. ISSUE #2:
  467.  
  468. Robin Shank provided us with a “How to Program FunctionKeys” in HyperTalk
  469. script. We left out a word, and the script will not work without it.  The
  470. script should read:
  471.  
  472. On functionkey whatkey
  473.    if whatkey is 6 then
  474.    type “x” with commandkey  — Cut whatever is selected
  475.    domenu “background”       — enter the background
  476.    type “v” with commandkey  — Paste it
  477.    domenu “background”       — leave the background
  478.      else
  479.         pass functionkey
  480.      end if
  481. end functionkey
  482.  
  483.  
  484. We hope you have enjoyed reading WINDOID and have found it to be interesting
  485. and informative. We care enough to take the time to give you the most
  486. up-to-date information about HyperCard, and we would like to make a request for
  487. a little of your time. There is a form that follows this editorial; please fill
  488. it out if you will. We are very interested in hearing from you. What sort of
  489. stacks are you using, what kind of stacks are you creating, and what are your
  490. joys and frustrations in using HyperCard.
  491. You have the unique opportunity to communicate directly with Bill, Dan, and the
  492. entire HyperCard development team. We really want to know what you would like
  493. to see in HyperCard and are more than willing to give you what you want. What
  494. we need to make this happen is your input. Let us know what you think. We can
  495. address it in WINDOID or perhaps the next revision of HyperCard. You can make a
  496. difference in the world by communicating with us. Don’t pass up the
  497. opportunity!
  498.  
  499. The form:
  500.  
  501. Please use the following form to make a difference in the world:
  502.  
  503. Date:
  504. Name:
  505. Address:
  506. Phone #:
  507. Versions of:
  508.  a.  HyperCard:
  509.  b.  Associated software:
  510.  c.  System Software:
  511.    1. System
  512.    2. Finder
  513.    3. ImageWriter file
  514.    4. LaserWriter file
  515.    5. Any others
  516. Type of Macintosh:
  517. Peripherals:
  518. Description of problem, suggestions or comments:
  519.  
  520.  
  521. Fill this out and send it to:
  522.  
  523. AHUG
  524. C/O David Leffler
  525. Apple Computer Inc.
  526. MS 27AQ
  527. 20525 Mariani Ave.,
  528. Cupertino, CA  95014
  529.  
  530. Or copy the format and AppleLink™ it to:
  531.  
  532. HYPERBUG$
  533.  
  534. We thank you for your participation and know that you will be pleased to see
  535. your ideas, comments, and suggestions appear in future issues of WINDOID, the
  536. publication for the informed HyperCard user.
  537.  
  538.  
  539.